/**
 * Created With IntelliJ IDEA
 * Description:牛客网：BM30 二叉搜索树与双向链表
 * <a href="https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=295&tqId=23253&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj">...</a>
 * User: DELL
 * Data: 2022-12-21
 * Time: 23:05
 */
//知识点：  二叉搜索树是一种特殊的二叉树，它的每个节点值大于它的左子节点，且大于全部左子树的节
//        点值，小于它右子节点，且小于全部右子树的节点值。因此二叉搜索树一定程度上
//        算是一种排序结构。
//思路：   二叉搜索树最左端的元素一定最小，最右端的元素一定最大，符合“左中右”的特性，
//        因此二叉搜索树的中序遍历就是一个递增序列，我们只要对它中序遍历就可以组装称
//        为递增双向链表。
class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
    this.val = val;
    }

 }

public class Solution {
    //双向链表的头结点
    private TreeNode head = null;
    //遍历过程中的前序结点
    private TreeNode pre = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
        //判空处理
        if (pRootOfTree == null) {
            return null;
        }
        //遍历左子树
        Convert(pRootOfTree.left);
        //为第一个结点时
        if (pre == null) {
            head = pRootOfTree;
            pre = pRootOfTree;
            return head;
        } else { //不是第一个结点时
            pre.right = pRootOfTree;
            pRootOfTree.left = pre;
            pre = pRootOfTree;
        }
        //遍历右子树
        Convert(pRootOfTree.right);
        //返回头结点
        return head;
    }
}
